След това въведение в markup езиците, нека разгледаме конкретно XML. Всеки XML документ трябва да започва с тага <!---->Обикновено се включва и атрибута verion, указващ използваната версия (за момента 1.0): <!--l version=1.-->В XML почти няма предварително определени тагове (с изключение на няколко служебни, какъвто е <!---->, но тях ще разгледаме по-късно). Всеки таг трябва да има затварящ таг, а ако тага няма вътрешно съдържание (такова, което е между отварящия и затварящия таг) то се използва самозатварящ се таг - тагъв, който завършва със символа "/". Т.е. вместо да пишете можете да напишете Таговете трябва правилно да се влагат - т.е. можете в рамките на един таг да дефинирате множество тагове, но трябва да ги затворите в реда, обратен на тяхното отваряне. Ще илюстрирам това с един пример:
Код:<!--таг2--><!--таг1--><!--таг1--><!--таг2--><books>
<type>
<style>programming book
<name>
<title>Thinking in Java</title>
<author>Bruce Eckel</author>
<subject>Java</subject>
</name>
<name>
<title>Mastering Delphi 6</title>
<author>Marco Cantu</author>
<subject>Delphi</subject>
</name>
</style>
</type>
</books>
Или с други думи, декларацията <таг1><таг2> е валидна, докато <таг1><таг2> - не е. XML документа има дървовидна структура - тази структура може да има един-единствен корен. Т.е. трябва да имате един таг, в който да се съдържат всички останали. В предишния ни пример, това беше тагът
Но все пак, това далеч не е всичко. В XML съществуват служебни тагове,
които започват с удивителна (!). Те се използват за дефиниране
структурата на документа. Тъй като XML няма нито определени тагове,
нито определени атрибути, то програмата няма как да знае какво е
съдържанието на XML документа. Тя може просто да предположи, че то
отговаря на нейните критерии и да го използва така, както би използвала
валиден XML документ. Но ако то не отговаря на изискванията? Тук е
мястото да разгледаме обработването на данните в XML документа и
XML-процесорите. Програма, която интерпретира по някакъв начин XML
документ и извежда резултата на екрана, се нарича XML процесор.
Процесора може да проверява дали документа е валиден, но това не е
задължително. Когато процесора проверява XML документа, той може да
установи само грешки в XML синтаксиса (незатворени тагове и т.н.), до
момента, в който той не знае каква трябва да бъде структурата на
документа. Един от основните начини за определяне на структурата на
документа е DTD (Document Type Definition - дефиниция на типа на
документа) - система от служебни XML тагове, които описват какви тагове
се очаква да присъстват в документа, какви атрибути и дъщерни тагове
могат да имат те, какви са позволените стойности на атрибутите. По този
начин процесора може да открие грешка и да изведе информативно съобщение, вместо да интерпретатора данни, които не подхождат за
програмата. Именно създаването на DTD ще разгледаме сега, за да
преминем после към използването на XML в web. Дефиницията се слага в
началото на документа. Може също така да се използва външен .dtd файл -
това е особено полезно, когато множество документи имат една и съща
дефиниция или при големи дефиниции, за да бъдат по-удобни за работа
както самата дефиниция, така и документа. Дефиницията на документа
започва с тага <!DOCTYPE> Следва име на дефиницията. Ако
дефиницията е във външен файл се използва ключовата дума SYSTEM и името
на файла. Ето един пример: <!DOCTYPE Library SYSTEM "MyLbrl.dtd">
Първото нещо, на което трябва да се обърне внимание, че служебните
тагове НЯМАТ затварящи тагове. Служебния таг веднага ще го познаете по
удивителната в началото, главните букви и липсата на затварящ таг. Но
как тогава се обозначава край на дефиницията? Когато дефиницията не е
във външен файл, то тя има вида
Код:
<!DOCTYPE Library [
...
]>
Именно между квадратните скоби се съдържа цялостната дефиниция, състояща
се от серия служебни тагове. Определянето на елемент става чрез тага
<!ELEMENT> който съдържа името на елемента и изброени в кръгли
скоби възможните дъщерни елементи.
Ако създаваме дефиниция на кода
Код:
<skininfo>
<version>1.1</version>
<name>zygote</name>
<comment>.enjoy.check the skin configuration windows.enjoy.</comment>
<author>Michael S. , Mathieu P.</author>
<email>[email protected], [email protected]</email>
<homepage>http://www.breedart.org</homepage>
<screenshot>skinshot.png</screenshot>
</skininfo>
То тя ще изглежда така
Код:
<!DOCTYPE Skin [
<!ELEMENT skininfo (version, name, comment, author, email, homepage, screenshot)>
]>
Но освен главния елемент (root) трябва да определим дъщерните елементи.
Те имат някакъв тип данни, които се съдържат между отварящия и
затварящия таг. Обикновено данните са #PCDATA (повече за типовете данни
ще научите малко по-нататък, и съответно нашата дефиниция ще се разшири
до:
Код:
<!DOCTYPE Skin [
<!ELEMENT skininfo (version, name, comment, author, email, homepage, screenshot)>
<!ELEMENT version (#PCDATA)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT comment (#PCDATA)>
<!ELEMENT author (#PCDATA)>
<!ELEMENT email (#PCDATA)>
<!ELEMENT homepage (#PCDATA)>
<!ELEMENT screenshot (#PCDATA)>
]